package view;

import android.app.Activity;
import android.content.Context;
import android.text.Layout;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TextView;

import utils.UnitUtils;


/**
 * Created by Administrator on 2017/3/28.
 */

public class MyVariousLineTextView extends TextView {
    private Context context;
    public MyVariousLineTextView(Context context) {
        super(context);
        this.context = context;
    }

    public MyVariousLineTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public MyVariousLineTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
    }

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        Layout layout = getLayout();
        if (layout != null) {
            int height = (int) Math.ceil(getMaxLineHeight(this.getText()
                    .toString()))
                    + getCompoundPaddingTop()
                    + getCompoundPaddingBottom();

            int width = getMeasuredWidth();
            setMeasuredDimension(width, height);
        }
    }

    private float getMaxLineHeight(String str) {
        float height ;
        float screenW = ((Activity)context).getWindowManager()
                .getDefaultDisplay().getWidth();
        float paddingLeft = ((LinearLayout) this.getParent())
                .getPaddingLeft();
        float paddingReft = ((LinearLayout) this.getParent())
                .getPaddingRight();
        // 这里具体this.getPaint()要注意使用，要看你的TextView在什么位置，这个是拿TextView父控件的Padding的，为了更准确的算出换行
        int line = (int) Math.ceil((this.getPaint().measureText(str) / (screenW
                - paddingLeft - paddingReft-UnitUtils.dip2px(48))));
        height = ((this.getPaint().getFontMetrics().descent - this.getPaint()
                .getFontMetrics().ascent)+ UnitUtils.dip2px(5)) * line;
        return height;
    }
}
